package org.db.ui;

import java.awt.BorderLayout;
import java.awt.Frame;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;

import javax.swing.JDialog;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.SwingUtilities;

import org.db.Manager;
import org.db.util.PDF;

public class Dialog extends JDialog implements ActionListener {
	/**
	 * Hauptmenü
	 */

	private static final long serialVersionUID = 6456433L;

	private static final String DEFAULT_PROJECT_DIRECTORY = "data";

	// Initialisierung der GUI- Elemente
	private Frame f;

	private JMenuItem loadMenuItem;

	private JMenuItem exitMenuItem;

	private JMenuItem loadHelpItem;

	private JMenuItem newMenuItem;

	private JMenuItem kmMenuItem;

	// private String LEERES_VERZEICHNIS_WARNUNG =
	// "Das von Ihnen gewählte Verzeichnis ist leer. Bitten wählen sie ein anderes aus.";
	private JFileChooser fileChooser;

	public JFrame helpFrame;

	// Eigenschaften des Frames
	public Dialog(int width, int height) {
		setTitle("TrassenplanDigital");
		setSize(600, 300);
		setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
		setLayout(new BorderLayout());
		setLocationRelativeTo(null);

		fileChooser = new JFileChooser(new File(DEFAULT_PROJECT_DIRECTORY));
		fileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY);

		erstelleMenu();
	}

	private void erstelleMenu() {
		JMenuBar menuBar = new JMenuBar();

		JMenu fileMenu = new JMenu("Datei");
		menuBar.add(fileMenu);

		JMenu helpMenu = new JMenu("Hilfe");
		menuBar.add(helpMenu);

		newMenuItem = new JMenuItem("Projekt anlegen");
		newMenuItem.addActionListener(this);
		fileMenu.add(newMenuItem);

		loadMenuItem = new JMenuItem("Projekt laden");
		loadMenuItem.addActionListener(this);
		fileMenu.add(loadMenuItem);

		kmMenuItem = new JMenuItem("km- Abfrage");
		kmMenuItem.addActionListener(this);
		fileMenu.add(kmMenuItem);

		loadHelpItem = new JMenuItem("Hilfe laden");
		loadHelpItem.addActionListener(this);
		helpMenu.add(loadHelpItem);

		fileMenu.addSeparator();

		exitMenuItem = new JMenuItem("Beenden");
		exitMenuItem.addActionListener(this);
		fileMenu.add(exitMenuItem);

		setJMenuBar(menuBar);
	}

	@Override
	public void actionPerformed(ActionEvent e) {
		if (e.getSource() == newMenuItem) {
			newProject();
		} else if (e.getSource() == loadMenuItem) {
			loadProjekt();
		} else if (e.getSource() == kmMenuItem) {
			kmAbfrage();
		} else if (e.getSource() == loadHelpItem) {
			loadHelp();
		} else if (e.getSource() == exitMenuItem) {
			exit();
		}
	}

	private void newProject() {
		final ProjektDatenDialog projektDialog = new ProjektDatenDialog(this);

		SwingUtilities.invokeLater(new Runnable() {
			@Override
			public void run() {
				int returnValue = projektDialog.showDialog();
				if (returnValue == JOptionPane.OK_OPTION) {
					final AuswahlDialog auswahlDialog = new AuswahlDialog(
							Dialog.this);
					auswahlDialog.setLocationRelativeTo(null);
					auswahlDialog.setVisible(true);
				}
			}
		});

	}

	private void loadProjekt() {
		int ret = fileChooser.showOpenDialog(this);
		if (ret == JFileChooser.APPROVE_OPTION) {
			File file = fileChooser.getSelectedFile();
			Manager.getInstance().loadXMLFile(file.getPath());
			final ProjektDatenDialog projektDialog = new ProjektDatenDialog(
					this);

			SwingUtilities.invokeLater(new Runnable() {
				@Override
				public void run() {
					int returnValue = projektDialog.showDialog();
					if (returnValue == JOptionPane.OK_OPTION) {
						final AuswahlDialog auswahlDialog = new AuswahlDialog(
								Dialog.this);
						auswahlDialog.setLocationRelativeTo(null);
						auswahlDialog.setVisible(true);
					}
				}
			});

		}
	}

	private void kmAbfrage() {
		int ret = fileChooser.showOpenDialog(this);
		if (ret == JFileChooser.APPROVE_OPTION) {
			File file = fileChooser.getSelectedFile();
			Manager.getInstance().loadXMLFile(file.getPath());
			// if(folder.listFiles().length == 0){
			// JOptionPane.showMessageDialog(this, LEERES_VERZEICHNIS_WARNUNG,
			// "Leeres Verzeichnis ausgewählt", JOptionPane.WARNING_MESSAGE);
			// }
			final AbfragenDialog dialog = new AbfragenDialog();
			dialog.setLocationRelativeTo(null);
			dialog.setVisible(true);
		}
	}

	public JMenuItem getLoadHelpItem() {
		return loadHelpItem;
	}

	public void setF(Frame f) {
		this.f = f;
	}

	public Frame getF() {
		return f;
	}

	private void exit() {
		dispose();
	}

	/**
	 * Handbuch laden
	 */
	private void loadHelp() {
		PDF.openPDF(ClassLoader.getSystemResourceAsStream("Handbuch.pdf"));
	}
}
